package com.dp.client.views.almacenes;

import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.CaptionPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.dp.client.dto.AlmacenDTO;
import com.dp.client.dto.EstadoPaqueteDTO;
import com.dp.client.dto.PaqueteDTO;
import com.dp.client.dto.VueloDTO;
import com.dp.client.servicios.almacenes.IServiciosAlmacen;
import com.dp.client.servicios.almacenes.IServiciosAlmacenAsync;
import com.dp.client.servicios.conexion.IServiciosConexion;
import com.dp.client.servicios.conexion.IServiciosConexionAsync;
import com.dp.client.servicios.estadopaquete.IServiciosEstadoPaquete;
import com.dp.client.servicios.estadopaquete.IServiciosEstadoPaqueteAsync;
import com.dp.client.servicios.paquete.IServiciosPaquete;
import com.dp.client.servicios.paquete.IServiciosPaqueteAsync;
import com.dp.client.util.Alerts;
import com.dp.client.views.Geografico;
import com.dp.client.views.conexiones.TablaConexiones;
import com.dp.shared.FieldVerifier;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ListBox;

public class AlmacenPaquetesPrincipal extends Composite {
	private TextBox txtCodigo;
	private Button btnBuscar;
	private CaptionPanel cptnpnlNewPanel;
	private String msgError[]={"Codigo debe ser un numero"};
	private AlmacenDTO almacen;
	private Label lblEstado;
	private ListBox comboBox;
	private List <AlmacenDTO> almacenes;
	private TablaPaquetesAlmacen tablaDatos;
	private Label lblVuelo;
	private TextBox txtVuelos;
	
	public AlmacenPaquetesPrincipal(AlmacenDTO almacen) {
		this.almacen=almacen;
		FlexTable flexTable = new FlexTable();
		initWidget(flexTable);
		
		cptnpnlNewPanel = new CaptionPanel("Paquetes por Almacen");
		flexTable.setWidget(0, 0, cptnpnlNewPanel);
		
		FlexTable flexTable_1 = new FlexTable();
		cptnpnlNewPanel.setContentWidget(flexTable_1);
		flexTable_1.setSize("423px", "3cm");
		
		Label lblCodigo = new Label("Codigo");
		flexTable_1.setWidget(0, 0, lblCodigo);
		
		txtCodigo = new TextBox();
		flexTable_1.setWidget(0, 1, txtCodigo);

		
		btnBuscar = new Button("Buscar");
		btnBuscar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				int indice=validQuery();
				if( indice==-1 ){
					do_query();
				} else {
					Alerts.crearAlerta(msgError[indice]);
				} 
			}
		});
		
		lblEstado = new Label("Estado :");
		flexTable_1.setWidget(1, 0, lblEstado);
		
		comboBox = new ListBox();
		flexTable_1.setWidget(1, 1, comboBox);
		
		lblVuelo = new Label("Vuelo :");
		flexTable_1.setWidget(2, 0, lblVuelo);
		
		txtVuelos= new TextBox();
		flexTable_1.setWidget(2, 1, txtVuelos);
		flexTable_1.setWidget(3, 0, btnBuscar);
		
		tablaDatos = new TablaPaquetesAlmacen(this);
		flexTable.setWidget(1, 0, tablaDatos);
		cargarAlmacenes();
		cargarEstados();
		//cargarVuelos();
		do_query();
	}

	public void cargarAlmacenes() {
		IServiciosAlmacenAsync serviciosAlmacen = GWT.create(IServiciosAlmacen.class);
		serviciosAlmacen.listAlmacenes(new AsyncCallback< List<AlmacenDTO>>(){
			@Override
			public void onSuccess(List <AlmacenDTO> result){
				almacenes=result;
			}
			@Override
			public void onFailure(Throwable caught) {
				Alerts.dialogErrorConexion();
			}
		});
	}

	public AlmacenDTO getAlmacen(int idAlmacen){
		AlmacenDTO almacen=null;
		for (AlmacenDTO a:almacenes){
			if (a.getId()==idAlmacen){
				almacen=a;
			}
		}
		return almacen;
	}
	
	private void cargarEstados() {
		IServiciosEstadoPaqueteAsync serviciosEstadoPaquete = GWT.create(IServiciosEstadoPaquete.class);
		serviciosEstadoPaquete.listEstadoPaquete(new AsyncCallback< List<EstadoPaqueteDTO>>(){
			@Override
			public void onSuccess(List <EstadoPaqueteDTO> result){
				comboBox.addItem("Seleccione", null, 0+"");
				for (EstadoPaqueteDTO e:result){
					if (e.getDescripcion().compareTo("vuelo")==0 || e.getDescripcion().compareTo("recogido")==0) continue;
					comboBox.addItem(e.getDescripcion(),null,e.getId()+"");
				}
			}
			@Override
			public void onFailure(Throwable caught) {
				Alerts.dialogErrorConexion();
			}
		});
	}



	protected void do_query() {
		if (validQuery()!=-1) return;
		//String ciudadId = geografico.getIdCiudad()==0 ? "-1": geografico.getIdCiudad()+"";
		//codigo y estado y idAlmacen
		int idAlmacen=almacen.getId();
		String estado=comboBox.getSelectedIndex()==-1 ? "-1": ""+Integer.parseInt( comboBox.getValue(comboBox.getSelectedIndex())) ;
		//int aux=Integer.parseInt( comboBox.getValue(pos) );
		//String estado= aux==0 ? "-1":aux+"";
		String codigo=txtCodigo.getText();
		System.out.println(" estado "+estado);
		String a=txtVuelos.getText();
		int idVuelo = txtVuelos.getText().compareTo("")==0? -1:Integer.parseInt(txtVuelos.getText());
		IServiciosPaqueteAsync serviciosPaquete = GWT.create(IServiciosPaquete.class);
		serviciosPaquete.listPaquetesQuery(idAlmacen, estado,codigo,idVuelo,new AsyncCallback< List<PaqueteDTO>>(){
			@Override
			public void onSuccess(List <PaqueteDTO> result){
				tablaDatos.setData(result);
			}
			@Override
			public void onFailure(Throwable caught) {
				
				Alerts.dialogErrorConexion();
			}
		});
		
	}
	
	public void refrescar(){
		cargarAlmacenes();
		do_query();
	}

	protected int validQuery() {
		if ( !FieldVerifier.isEmpty(txtCodigo.getValue()) && !FieldVerifier.isInteger(txtCodigo.getValue())) return 0;
		if (!FieldVerifier.isEmpty(txtVuelos.getValue()) && !FieldVerifier.isInteger(txtVuelos.getValue())) return 0;
		return -1;
	}

}
